﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;

namespace CityGames
{
    public partial class FormPromocionesAlta : Form
    {
        string expRegCantidadEuros = @"^([0-9]+([','][0-9]{1,2})?){1}$";

        ErrorProvider epNombre;
        ErrorProvider epCantidadEuros;
        ErrorProvider epCantidadPorcentaje;
        ErrorProvider epFechas;

        string errores = "Se han encontrado los siguientes errores:\n\n";
        private bool modificar;
        private bool seleccionarTodos = true;

        static private FormContenedor contenedor;
        static private Juego juego = new Juego();
        static private Genero genero = new Genero();
        static private Plataforma plataforma = new Plataforma();
        static private Juego juegoVirtual = new Juego();
        static private Promocion promocion = new Promocion();
        
        private const int numeroDeJuegosPorPagina = 4;

        private int numeroDePaginaActualPromociones;
        private int numeroDePaginasMaximoPromociones;
        private DataSet dsJuegos;
        private DataSet dsTodosJuegosFiltrados;

        private int numeroDePaginasMaximoSeleccionados;
        private int numeroDePaginaActualSeleccionados;
        private DataSet dsJuegosSeleccionados;

        private int numeroPromocionesSeleccionadas;

        public FormPromocionesAlta()
        {
            InitializeComponent();
        }

        public void MostrarTodos()
        {
            try
            {
                tbTitulo.Text = "";
                tbTitulo.Focus();
                cbGenero.SelectedItem = cbGenero.Items[0];
                cbPlataforma.SelectedItem = cbPlataforma.Items[0];

                numeroDePaginaActualPromociones = 1;
                CargarDataGridViewJuegos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void FormPromocionesAlta_Load(object sender, EventArgs e)
        {
            try
            {
                modificar = false;

                epNombre = new ErrorProvider();
                epNombre.SetIconAlignment(tbNombre, ErrorIconAlignment.MiddleRight);
                epNombre.SetIconPadding(tbNombre, 2);
                epNombre.BlinkStyle = ErrorBlinkStyle.BlinkIfDifferentError;

                epCantidadEuros = new ErrorProvider();
                epCantidadEuros.SetIconAlignment(tbDescuentoEuros, ErrorIconAlignment.MiddleRight);
                epCantidadEuros.SetIconPadding(tbDescuentoEuros, 2);
                epCantidadEuros.BlinkStyle = ErrorBlinkStyle.BlinkIfDifferentError;

                epCantidadPorcentaje = new ErrorProvider();
                epCantidadPorcentaje.SetIconAlignment(nudDescuentoPorcentaje, ErrorIconAlignment.MiddleRight);
                epCantidadPorcentaje.SetIconPadding(nudDescuentoPorcentaje, 2);
                epCantidadPorcentaje.BlinkStyle = ErrorBlinkStyle.BlinkIfDifferentError;

                epFechas = new ErrorProvider();
                epFechas.SetIconAlignment(dtpFechaInicio, ErrorIconAlignment.MiddleRight);
                epFechas.SetIconPadding(dtpFechaInicio, 2);
                epFechas.BlinkStyle = ErrorBlinkStyle.BlinkIfDifferentError;

                contenedor = (FormContenedor)MdiParent;

                dsJuegos = new DataSet();
                dsJuegosSeleccionados = new DataSet();
                
                numeroDePaginaActualPromociones = 1;

                cbGenero.Items.Add("Todos");
                foreach (DataRow row in genero.ObtenerGeneros().Rows)
                {
                    cbGenero.Items.Add(row[0].ToString());
                }
                cbGenero.SelectedItem = cbGenero.Items[0];

                cbPlataforma.Items.Add("Todas");
                foreach (DataRow row in plataforma.ObtenerPlataformas().Rows)
                {
                    cbPlataforma.Items.Add(row[0].ToString());
                }
                cbPlataforma.SelectedItem = cbPlataforma.Items[0];
                
                juegoVirtual.BorrarJuegosVirtuales();
                
                MostrarTodos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han producido los siguientes errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        public void Limpiar()
        {
            try
            {
                modificar = false;
                lbNombreForm.Text = "Nueva Promocion";

                tbNombre.Text = "";
                tbNombre.Enabled = true;
                tbNombre.Focus();
                tbDescuentoEuros.Text = "";
                nudDescuentoPorcentaje.Value = 0;
                rbPromocion2x1.Checked = true;

                dtpFechaInicio.Value = DateTime.Today;
                dtpFechaFin.Value = DateTime.Today;

                juegoVirtual.BorrarJuegosVirtuales();
                CargarDataGridViewJuegosSeleccionados();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han producido los siguientes errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void CargarDataGridViewJuegos()
        {
            try
            {
                numeroDePaginasMaximoPromociones = int.Parse(Math.Ceiling(double.Parse(juego.ObtenerNumeroDeJuegosParaPromocion(tbTitulo.Text, cbGenero.Text, cbPlataforma.Text).ToString()) / numeroDeJuegosPorPagina).ToString());

                if (numeroDePaginaActualPromociones == 0)
                    numeroDePaginaActualPromociones = 1;

                if (numeroDePaginaActualPromociones > numeroDePaginasMaximoPromociones)
                    numeroDePaginaActualPromociones = numeroDePaginasMaximoPromociones;

                dsJuegos = juego.ObtenerJuegosFiltradosParaPromocion(tbTitulo.Text, cbGenero.Text, cbPlataforma.Text, numeroDeJuegosPorPagina * (numeroDePaginaActualPromociones - 1), numeroDePaginaActualPromociones * numeroDeJuegosPorPagina);
                dgvJuegos.DataSource = dsJuegos;
                dgvJuegos.DataMember = "JuegosFiltrados";
                lblPaginaDGV.Text = "Página " + numeroDePaginaActualPromociones.ToString() + " de " + numeroDePaginasMaximoPromociones.ToString();

                if (numeroDePaginaActualPromociones <= 1)
                {
                    bDGVJuegosPaginaAnterior.Enabled = false;
                    bDGVJuegosPrimeraPagina.Enabled = false;
                }
                else
                {
                    bDGVJuegosPaginaAnterior.Enabled = true;
                    bDGVJuegosPrimeraPagina.Enabled = true;
                }

                if (numeroDePaginaActualPromociones == numeroDePaginasMaximoPromociones)
                {
                    bDGVJuegosPaginaSiguiente.Enabled = false;
                    bDGVJuegosUltimaPagina.Enabled = false;
                }
                else
                {
                    bDGVJuegosPaginaSiguiente.Enabled = true;
                    bDGVJuegosUltimaPagina.Enabled = true;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void tbTitulo_TextChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActualPromociones = 1;
                CargarDataGridViewJuegos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bMostrarTodos_Click(object sender, EventArgs e)
        {
            try
            {
                MostrarTodos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

 
        private void cbGenero_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActualPromociones = 1;
                CargarDataGridViewJuegos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void cbPlataforma_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActualPromociones = 1;
                CargarDataGridViewJuegos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGVPrimeraPagina_Click(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActualPromociones = 1;
                CargarDataGridViewJuegos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGVPaginaAnterior_Click(object sender, EventArgs e)
        {
            try
            {
                if (numeroDePaginaActualPromociones > 1)
                {
                    numeroDePaginaActualPromociones--;
                    CargarDataGridViewJuegos();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGVPaginaSiguiente_Click(object sender, EventArgs e)
        {
            try
            {
                if (numeroDePaginaActualPromociones < numeroDePaginasMaximoPromociones)
                {
                    numeroDePaginaActualPromociones++;
                    CargarDataGridViewJuegos();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGVUltimaPagina_Click(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActualPromociones = numeroDePaginasMaximoPromociones;
                CargarDataGridViewJuegos();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bAgregarJuego_Click(object sender, EventArgs e)
        {
            try
            {   
                if (dgvJuegos.SelectedRows.Count > 0)
                {
                    if (!modificar)
                    {
                        GuardarCamposJuegoVirtual(dsJuegos.Tables["JuegosFiltrados"].Rows[dgvJuegos.SelectedRows[0].Index]);

                        if (!juegoVirtual.InsertarJuegoVirtualPromociones())
                        {
                            MessageBox.Show("El Juego ya esta seleccionado.    ", "Juego Seleccionado", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                        else
                        {
                            //CargarDataGridViewJuegos(); //para que se quitasen los que han sido seleccionados pero no lo implementé
                            CargarDataGridViewJuegosSeleccionados();
                        }
                    }
                    else
                    {
                        GuardarCamposJuegoVirtual(dsJuegos.Tables["JuegosFiltrados"].Rows[dgvJuegos.SelectedRows[0].Index]);

                        if (!juegoVirtual.InsertarJuegoVirtualPromociones())
                        {
                            MessageBox.Show("El Juego ya esta seleccionado.    ", "Juego Seleccionado", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        }
                        else
                        {
                            //CargarDataGridViewJuegos();
                            //si en este punto he insertado los elementos que saco al datagrid en la tabla de juego virtual puedo preguntar lo mismo que arriba
                            CargarDataGridViewJuegosSeleccionados();
                        }
                    }
                }
                else
                {
                    MessageBox.Show("Debe seleccionar un juego.    ", "Selecciona un Juego", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void GuardarCamposJuegoVirtual(DataRow datos)
        {
            juegoVirtual.Nombre = datos["Nombre"].ToString();
            juegoVirtual.Plataforma = datos["Plataforma"].ToString();
            juegoVirtual.Genero = datos["Genero"].ToString();
            juegoVirtual.Sinopsis = datos["Sinopsis"].ToString();
            juegoVirtual.Caratula = datos["Caratula"].ToString();
            juegoVirtual.PrecioNuevo = datos["P.Nuevo"].ToString();
            juegoVirtual.PrecioSegundaMano = datos["P.2ª Mano"].ToString();
            juegoVirtual.Tarifa = datos["Tarifa"].ToString();
            juegoVirtual.FechaLanzamiento = DateTime.Parse(datos["F.Lanzamiento"].ToString());
        }


        public void CargarDataGridViewJuegosSeleccionados()
        {
            try
            {
                numeroPromocionesSeleccionadas = int.Parse(juegoVirtual.ObtenerNumeroDeJuegosVirtuales().ToString());
                numeroDePaginasMaximoSeleccionados = int.Parse(Math.Ceiling(double.Parse(numeroPromocionesSeleccionadas.ToString()) / numeroDeJuegosPorPagina).ToString());

                if (numeroDePaginaActualSeleccionados == 0)
                    numeroDePaginaActualSeleccionados = 1;

                if (numeroDePaginaActualSeleccionados > numeroDePaginasMaximoSeleccionados)
                    numeroDePaginaActualSeleccionados = numeroDePaginasMaximoSeleccionados;

                dsJuegosSeleccionados = juegoVirtual.ObtenerJuegosVirtuales(numeroDeJuegosPorPagina * (numeroDePaginaActualSeleccionados - 1), numeroDePaginaActualSeleccionados * numeroDeJuegosPorPagina);
                dgvJuegosSeleccionados.DataSource = dsJuegosSeleccionados;
                dgvJuegosSeleccionados.DataMember = "JuegosSeleccionados";
                lblPaginaDGVSeleccionados.Text = "Página " + numeroDePaginaActualSeleccionados.ToString() + " de " + numeroDePaginasMaximoSeleccionados.ToString();


                if (numeroDePaginaActualSeleccionados <= 1)
                {
                    bDGVSeleccionadosPaginaAnterior.Enabled = false;
                    bDGVSeleccionadosPrimeraPagina.Enabled = false;
                }
                else
                {
                    bDGVSeleccionadosPaginaAnterior.Enabled = true;
                    bDGVSeleccionadosPrimeraPagina.Enabled = true;
                }

                if (numeroDePaginaActualSeleccionados == numeroDePaginasMaximoSeleccionados)
                {
                    bDGVSeleccionadosPaginaSiguiente.Enabled = false;
                    bDGVSeleccionadosUltimaPagina.Enabled = false;
                }
                else
                {
                    bDGVSeleccionadosPaginaSiguiente.Enabled = true;
                    bDGVSeleccionadosUltimaPagina.Enabled = true;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bCancelar_Click(object sender, EventArgs e)
        {
            try
            {
                if (!modificar)
                    contenedor.hijoFormMenuPrincipal.Focus();
                else
                    contenedor.hijoFormPromocionesGestion.Focus();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGVSeleccionadosPrimeraPagina_Click(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActualSeleccionados = 1;
                CargarDataGridViewJuegosSeleccionados();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGVSeleccionadosPaginaAnterior_Click(object sender, EventArgs e)
        {
            try
            {
                if (numeroDePaginaActualSeleccionados > 1)
                {
                    numeroDePaginaActualSeleccionados--;
                    CargarDataGridViewJuegosSeleccionados();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGVSeleccionadosPaginaSiguiente_Click(object sender, EventArgs e)
        {
            try
            {
                if (numeroDePaginaActualSeleccionados < numeroDePaginasMaximoSeleccionados)
                {
                    numeroDePaginaActualSeleccionados++;
                    CargarDataGridViewJuegosSeleccionados();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bDGVSeleccionadosUltimaPagina_Click(object sender, EventArgs e)
        {
            try
            {
                numeroDePaginaActualSeleccionados = numeroDePaginasMaximoSeleccionados;
                CargarDataGridViewJuegosSeleccionados();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void bQuitarJuego_Click(object sender, EventArgs e)
        {
            try
            {
                if (dgvJuegosSeleccionados.SelectedRows.Count > 0)
                {
                    GuardarCamposJuegoVirtual(dsJuegosSeleccionados.Tables["JuegosSeleccionados"].Rows[dgvJuegosSeleccionados.SelectedRows[0].Index]);

                    if (!juegoVirtual.BorrarUnJuegoVirtual())
                        MessageBox.Show("No se pudo quitar el juego seleccionado.    ", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    else
                    {
                        //CargarDataGridViewSociosTodos();
                        CargarDataGridViewJuegosSeleccionados();
                    }
                }
                else
                {
                    MessageBox.Show("Debe seleccionar juego para quitar.    ", "Selecciona un Juego", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private bool validarCampos()
        {
            bool resultado = true;

            try
            {
                string nombre = tbNombre.Text;
                string cantidadEuros = tbDescuentoEuros.Text;
                int cantidadPorcentaje = int.Parse(nudDescuentoPorcentaje.Value.ToString());

                DateTime fechaInicio = dtpFechaInicio.Value;
                DateTime fechaFin = dtpFechaFin.Value;

                errores = "";

                LimpiarErrorProvider();

                if (!modificar)
                {
                    if (nombre != "")
                    {
                        if (!promocion.ExistePromocion(tbNombre.Text))
                        {
                            promocion.Nombre = nombre;
                            epNombre.SetError(tbNombre, null);
                        }
                        else
                        {
                            resultado = false;
                            errores = "- Ya existe una promoción con ese nombre. \n";
                            epNombre.SetError(tbNombre, "Escribir nombre para la promoción.");
                        }

                    }
                    else
                    {
                        resultado = false;
                        errores = "- Escribir nombre para la promoción. \n";
                        epNombre.SetError(tbNombre, "Escribir nombre para la promoción.");
                    }
                }

                if (rbDescuentoEuros.Checked == true)
                {
                    promocion.TipoDescuento = 1;

                    if (Regex.Match(cantidadEuros, expRegCantidadEuros).Success)
                    {
                        promocion.CantidadDescuento = decimal.Parse(cantidadEuros);
                        epCantidadEuros.SetError(tbDescuentoEuros, null);
                    }
                    else
                    {
                        resultado = false;
                        errores += "- Formato de cantidad en Euros incorrecta.\n";
                        epCantidadEuros.SetError(tbDescuentoEuros, "Formato de cantidad en Euros incorrecta.");
                    }
                }

                if (rbDescuentoPorcentaje.Checked == true)
                {
                    promocion.TipoDescuento = 2;

                    if (cantidadPorcentaje > 0)
                    {
                        promocion.CantidadDescuento = cantidadPorcentaje;
                        epCantidadPorcentaje.SetError(nudDescuentoPorcentaje, null);
                    }
                    else
                    {
                        resultado = false;
                        errores += "- El descuento no puede ser un 0%. \n";
                        epCantidadPorcentaje.SetError(nudDescuentoPorcentaje, "El descuento no puede ser un 0%.");
                    }
                }

                if (rbPromocion2x1.Checked == true)
                {
                    promocion.TipoDescuento = 3;
                    promocion.CantidadDescuento = 0;
                }

                if (!modificar)
                {
                    if ((DateTime.Compare(fechaInicio, DateTime.Today) >= 0) && (DateTime.Compare(fechaFin, fechaInicio) >= 0)) // Si es igual o mayor a la fecha actual
                    {
                        promocion.FechaInicio = fechaInicio;
                        promocion.FechaFin = fechaFin;
                        epFechas.SetError(dtpFechaInicio, null);
                    }
                    else
                    {
                        resultado = false;
                        errores += "- La fecha de inicio no puede ser menor al día de hoy ni la fecha de fin menor que la mayor.\n";
                        epFechas.SetError(dtpFechaInicio, "La fecha de inicio no puede ser menor al día de hoy ni la fecha de fin menor que la mayor.");
                    }
                }
                else
                {
                    if (DateTime.Compare(fechaFin, fechaInicio) >= 0) // Si la fecha de inicio es mayor a la fecha de fin
                    {
                        promocion.FechaInicio = fechaInicio;
                        promocion.FechaFin = fechaFin;
                        epFechas.SetError(dtpFechaInicio, null);
                    }
                    else
                    {
                        resultado = false;
                        errores += "- La fecha de inicio no puede ser menor al día de hoy ni la fecha de fin menor que la mayor.\n";
                        epFechas.SetError(dtpFechaInicio, "La fecha de inicio no puede ser menor al día de hoy ni la fecha de fin menor que la mayor.");
                    }
                }

                if (dgvJuegosSeleccionados.Rows.Count <= 0)
                {
                    resultado = false;
                    errores += "- Debes elegir al menos un juego.\n";
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            return resultado;
        }

        private void bAceptar_Click_1(object sender, EventArgs e)
        {
            
            try
            {                
                if (validarCampos())
                {
                    if (!modificar)
                    {
                        if (promocion.InsertarPromocion())
                        {
                            MessageBox.Show("Promoción Aplicada Correctamente", "Promoción Insertada", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            contenedor.hijoFormPromocionesGestion.CargarDataGridViewPromociones();
                            contenedor.hijoFormPromocionesGestion.Focus();
                        }
                        else
                            MessageBox.Show("No se pudo insertar", "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    else
                    {
                        if (promocion.ActualizarPromocion())
                        {
                            {
                                modificar = false;
                                MessageBox.Show("Promoción Modificada Correctamente", "Modificación", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                contenedor.hijoFormPromocionesGestion.CargarDataGridViewPromociones();
                                contenedor.hijoFormPromocionesGestion.Focus();
                            }
                        }
                        else
                            MessageBox.Show("No se pudo Modificar la Promoción", "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                }
                else 
                {
                    MessageBox.Show(errores, "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);

                    if (epNombre.GetError(tbNombre) != "")
                        tbNombre.Focus();
                    else if (epFechas.GetError(dtpFechaInicio) != "")
                        dtpFechaInicio.Focus();
                    else if (epCantidadEuros.GetError(tbDescuentoEuros) != "")
                        tbDescuentoEuros.Focus();
                    else if (epCantidadPorcentaje.GetError(nudDescuentoPorcentaje) != "")
                        nudDescuentoPorcentaje.Focus();
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void LimpiarErrorProvider()
        {
            try
            {
                epNombre.SetError(tbNombre, null);
                epCantidadEuros.SetError(tbDescuentoEuros, null);
                epCantidadPorcentaje.SetError(nudDescuentoPorcentaje, null);
                epFechas.SetError(dtpFechaInicio, null);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void nudDescuentoPorcentaje_Enter(object sender, EventArgs e)
        {
            try
            {
                rbDescuentoPorcentaje.Checked = true;
                tbDescuentoEuros.Text = "";
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        public void ModificarDatos(DataRow datos)
        {
            try
            {
                juego.BorrarJuegosVirtuales();

                modificar = true;
                lbNombreForm.Text = "Editar Promociones";
                
                //Pongo en la el formulario de alta los datos de la promoción
                tbNombre.Text = datos["Nombre"].ToString();
                tbNombre.Enabled = false;

                int tipoDes = int.Parse(datos["Tipo Descuento"].ToString());

                if (tipoDes == 1)
                {
                    tbDescuentoEuros.Text = datos["Cantidad Descuento"].ToString();
                    rbDescuentoEuros.Checked = true;
                }
                else if (tipoDes == 2)
                {
                    nudDescuentoPorcentaje.Value = decimal.Parse(datos["Cantidad Descuento"].ToString());
                    rbDescuentoPorcentaje.Checked = true;
                }
                else
                {
                    rbPromocion2x1.Checked = true;
                }

                dtpFechaInicio.Value = DateTime.Parse(datos["Fecha Inicio"].ToString());
                dtpFechaFin.Value = DateTime.Parse(datos["Fecha Fin"].ToString());

                //Cargo el datagrid de juegos de la parte de arriba
                numeroDePaginaActualPromociones = 1;
                CargarDataGridViewJuegos();

                //Inserto en la tabla Juego Virtual los juegos que estan insertados para esa promocion
                promocion.Nombre = tbNombre.Text;
                promocion.FechaInicio = dtpFechaInicio.Value;
                promocion.FechaFin = dtpFechaFin.Value;
                int codigoProm = promocion.ObtenerCodigoProm();
                juego.InsertarJuegosVirtualesDePromocionExistente(codigoProm);

                numeroDePaginaActualSeleccionados = 1;
                CargarDataGridViewJuegosSeleccionados();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void tbDescuentoEuros_Enter(object sender, EventArgs e)
        {
            try
            {
                rbDescuentoEuros.Checked = true;
                nudDescuentoPorcentaje.Value = 0;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void rbPromocion2x1_CheckedChanged(object sender, EventArgs e)
        {
            try
            {
                if (rbPromocion2x1.Checked)
                {
                    tbDescuentoEuros.Text = "";
                    nudDescuentoPorcentaje.Value = 0;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void rbDescuentoEuros_CheckedChanged(object sender, EventArgs e)
        {
            try
            {
                if (rbDescuentoEuros.Checked)
                    tbDescuentoEuros.Focus();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void rbDescuentoPorcentaje_CheckedChanged(object sender, EventArgs e)
        {
            try
            {
                if (rbDescuentoPorcentaje.Checked)
                    nudDescuentoPorcentaje.Focus();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                if (seleccionarTodos)
                {
                    seleccionarTodos = false;
                    btSeleccionarTodos.Text = "Ninguno";
                    juegoVirtual.BorrarJuegosVirtuales();

                    dsTodosJuegosFiltrados = juego.ObtenerTodosJuegosFiltradosParaPromocion(tbTitulo.Text, cbGenero.Text, cbPlataforma.Text);
                    int tam = dsTodosJuegosFiltrados.Tables[dsTodosJuegosFiltrados.Tables[0].TableName].Rows.Count;
                    int i = 0;
                    for (i = 0; i < tam; i++)
                    {
                        GuardarCamposJuegoVirtual(dsTodosJuegosFiltrados.Tables["TodosJuegosFiltrados"].Rows[i]);
                        juegoVirtual.InsertarJuegoVirtualPromociones();
                    }
                    CargarDataGridViewJuegosSeleccionados();
                }
                else
                {
                    seleccionarTodos = true;
                    btSeleccionarTodos.Text = "Todos";
                    juegoVirtual.BorrarJuegosVirtuales();
                    CargarDataGridViewJuegosSeleccionados();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString(), "Se han encontrado errores.", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
}

